//对原生axios进行封装
import axios from 'axios';

const myAxios = axios.create({
    //和vue.config.js里面的是一样的意思，这里写了，那里就可以不用写了
    //axios的url基础路径
    baseURL: 'http://localhost:3000',
    //时间限制，超过这个时间，会直接报错，用于请求超时的时间
    timeout: 3000
});

//axios拦截器
//请求拦截器，拦截请求,拦截成功第一个函数执行，拦截失败执行第二个方法
myAxios.interceptors.request.use((config) => {
    //给请求头添加token
    const token = localStorage.token;
    config.headers.Authorization = 'Bearer ' + token;  //'Bearer '看后端的验证规则是否需要些字符串

    return config;
}, (err) => {
    return err
});

//axios 响应拦截器
myAxios.interceptors.response.use(res => {
    // 响应成功执行该方法
    return res;
}, err => {
    // 响应失败执行该方法
    let message = '服务器连接失败';
    console.log(err,989);
    if (err && err.response) {
        console.log(err.response);
        switch (err.response.status) {
            case 401:
                message = '身份认证失败(401)';
                alert('未登录，请先登录');
                // $router.push('/login');
                // location.hash = '#/login';
                break;
            case 404: message = '请求资源找不到(404)'; break;
            case 500: message = '服务器错误(500)'; break;
            case 504: message = '网络超时(504)'; break;
        }
        return {
            data: {
                message,
                type: err.response.status,
                status: 0
            }
        }

    } else {
        return {
            data: {
                message: '服务器连接失败！',
                status: 0
            }
        }
    }

})

export default myAxios;
